package com.cysoft.third.echarts.component.dataZoom.inside;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-third-echarts
 * @package com.cysoft.third.echarts.component.dataZoom
 * @date 2025/3/13 01:11
 * @desc
 * 内置型数据区域缩放组件配置，用于在 ECharts 中实现数据区域的平移和缩放。
 * 该组件可内置在坐标系中，支持通过鼠标或触屏操作进行数据区域的平移和缩放。
 * 平移操作可通过在坐标系中滑动拖拽实现，缩放操作在 PC 端可通过鼠标滚轮滚动，在移动端可通过两指滑动缩放。
 */
public class DataZoomInside {

    /**
     * 组件类型，固定为内置型，用于标识该组件为内置型数据区域缩放组件。
     */
    private String type = "inside";
    /**
     * 组件 ID。默认不指定，指定则可用于在 option 或者 API 中引用组件。
     * 通过设置唯一的 ID，可以方便在后续操作中精准定位和操作该组件。
     */
    private String id;
    /**
     * 是否停止组件的功能，默认为 false。
     * 当设置为 true 时，该组件的平移和缩放功能将被禁用。
     */
    private Boolean disabled;
    /**
     * 设置 dataZoom-inside 组件控制的 x 轴（直角坐标系中的概念）。
     * 不指定时，当 orient 为 'horizontal' 时，默认控制和 dataZoom 平行的第一个 x 轴。
     * 可以是单个数字或数字数组，表示控制的轴索引。
     * 例如，若设置为 [0, 2]，则表示控制第一个和第三个 x 轴。
     */
    private Integer[] xAxisIndex;
    /**
     * 设置 dataZoom-inside 组件控制的 y 轴（直角坐标系中的概念）。
     * 不指定时，当 orient 为 'vertical' 时，默认控制和 dataZoom 平行的第一个 y 轴。
     * 可以是单个数字或数字数组，表示控制的轴索引。
     * 例如，若设置为 [1, 3]，则表示控制第二个和第四个 y 轴。
     */
    private Integer[] yAxisIndex;
    /**
     * 设置 dataZoom-inside 组件控制的 radius 轴（极坐标系中的概念）。
     * 可以是单个数字或数字数组，表示控制的轴索引。
     * 用于在极坐标图中控制数据区域的缩放和平移。
     */
    private Integer[] radiusAxisIndex;
    /**
     * 设置 dataZoom-inside 组件控制的 angle 轴（极坐标系中的概念）。
     * 可以是单个数字或数字数组，表示控制的轴索引。
     * 用于在极坐标图中控制数据区域的缩放和平移。
     */
    private Integer[] angleAxisIndex;
    /**
     * 数据过滤模式，可选值为：
     * - 'filter'：过滤数据窗口外的数据，影响其他轴的数据范围。即只要有一个维度在数据窗口外，整个数据项就会被过滤掉。
     * - 'weakFilter'：弱过滤，仅当数据项所有维度都在窗口同侧外部时才过滤。
     * - 'empty'：将数据窗口外的数据设置为空，不影响其他轴的数据范围。
     * - 'none'：不过滤数据，只改变数轴范围。
     * 默认为 'filter'。根据不同的业务需求选择合适的过滤模式。
     */
    private String filterMode = "filter";
    /**
     * 数据窗口范围的起始百分比，范围为 0 ~ 100，表示 0% ~ 100%。
     * 与 end 共同定义数据窗口范围。若设置了该值，则 startValue 失效。
     */
    private Integer start;
    /**
     * 数据窗口范围的结束百分比，范围为 0 ~ 100，表示 0% ~ 100%。
     * 与 start 共同定义数据窗口范围，默认值为 100。若设置了该值，则 endValue 失效。
     */
    private Integer end = 100;
    /**
     * 数据窗口范围的起始数值。如果设置了 start，则 startValue 失效。
     * 可以是数字、字符串或日期类型，具体取决于轴的类型。
     * 例如，在时间轴上可以是日期，在数值轴上可以是具体的数值。
     */
    private Object startValue;
    /**
     * 数据窗口范围的结束数值。如果设置了 end，则 endValue 失效。
     * 可以是数字、字符串或日期类型，具体取决于轴的类型。
     * 例如，在时间轴上可以是日期，在数值轴上可以是具体的数值。
     */
    private Object endValue;
    /**
     * 限制窗口大小的最小值（百分比值），取值范围为 0 ~ 100。
     * 如果设置了 minValueSpan，则 minSpan 失效。
     * 用于防止数据窗口缩放得过小。
     */
    private Integer minSpan;
    /**
     * 限制窗口大小的最大值（百分比值），取值范围为 0 ~ 100。
     * 如果设置了 maxValueSpan，则 maxSpan 失效。
     * 用于防止数据窗口缩放得过大。
     */
    private Integer maxSpan;
    /**
     * 限制窗口大小的最小值（实际数值）。例如在时间轴上可以设置为毫秒数。
     * 用于精确控制数据窗口的最小范围。
     */
    private Object minValueSpan;
    /**
     * 限制窗口大小的最大值（实际数值）。例如在时间轴上可以设置为毫秒数。
     * 用于精确控制数据窗口的最大范围。
     */
    private Object maxValueSpan;
    /**
     * 布局方式，可选值为 'horizontal'（水平）或 'vertical'（竖直），默认为 'horizontal'。
     * 不仅决定了组件的布局方向，对于直角坐标系而言，还决定了缺省情况控制横向数轴还是纵向数轴。
     */
    private String orient = "horizontal";
    /**
     * 是否锁定选择区域的大小。设置为 true 时只能平移，不能缩放。
     * 适用于只需要平移数据窗口而不需要缩放的场景。
     */
    private Boolean zoomLock;
    /**
     * 设置触发视图刷新的频率，单位为毫秒（ms），默认值为 100。
     * 如果 animation 设为 true 且 animationDurationUpdate 大于 0，可以保持 throttle 为默认值 100（或者设置为大于 0 的值），否则拖拽时有可能画面感觉卡顿。
     * 如果 animation 设为 false 或者 animationDurationUpdate 设为 0，且在数据量不大时，拖拽时画面感觉卡顿，可以把尝试把 throttle 设为 0 来改善。
     */
    private Integer throttle = 100;
    /**
     * 定义数据窗口范围的模式，形式为 [rangeModeForStart, rangeModeForEnd]。
     * 每项可选值为 'value'（绝对数值）或 'percent'（百分比）。
     * 例如 rangeMode: ['value', 'percent']，表示 start 值取绝对数值，end 取百分比。
     * 通常不需要手动设置，会根据 start、startValue、end、endValue 的设置自动调整。
     */
    private String[] rangeMode;
    /**
     * 如何触发缩放，可选值为：
     * - true：不按功能键，鼠标滚轮触发缩放。
     * - false：鼠标滚轮不触发缩放。
     * - 'shift'：按住 shift 键和鼠标滚轮触发缩放。
     * - 'ctrl'：按住 ctrl 键和鼠标滚轮触发缩放。
     * - 'alt'：按住 alt 键和鼠标滚轮触发缩放。
     * 默认值为 true。根据用户的操作习惯和需求进行设置。
     */
    private Object zoomOnMouseWheel = true;
    /**
     * 如何触发数据窗口平移，可选值为：
     * - true：不按功能键，鼠标移动触发平移。
     * - false：鼠标移动不触发平移。
     * - 'shift'：按住 shift 键和鼠标移动触发平移。
     * - 'ctrl'：按住 ctrl 键和鼠标移动触发平移。
     * - 'alt'：按住 alt 键和鼠标移动触发平移。
     * 默认值为 true。根据用户的操作习惯和需求进行设置。
     */
    private Object moveOnMouseMove = true;
    /**
     * 如何触发数据窗口平移，可选值为：
     * - true：不按功能键，鼠标滚轮触发平移。
     * - false：鼠标滚轮不触发平移。
     * - 'shift'：按住 shift 键和鼠标滚轮触发平移。
     * - 'ctrl'：按住 ctrl 键和鼠标滚轮触发平移。
     * - 'alt'：按住 alt 键和鼠标滚轮触发平移。
     * 默认值为 true。根据用户的操作习惯和需求进行设置。
     */
    private Object moveOnMouseWheel = true;
    /**
     * 是否阻止 mousemove 事件的默认行为，默认为 true。
     * 当设置为 true 时，会阻止 mousemove 事件的默认行为，避免与其他操作冲突。
     */
    private Boolean preventDefaultMouseMove = true;
}
